//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Resiliencehub service.
///
/// Resilience Hub helps you proactively prepare and protect your Amazon Web Services applications from disruptions. It offers continual resiliency assessment and validation that integrates into your software development lifecycle. This enables you to uncover resiliency weaknesses, ensure recovery time objective (RTO) and recovery point objective (RPO) targets for your applications are met, and resolve issues before they are released into production.
public struct Resiliencehub: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Resiliencehub client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "Resiliencehub",
            serviceIdentifier: "resiliencehub",
            serviceProtocol: .restjson,
            apiVersion: "2020-04-30",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: ResiliencehubErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack]: .init(endpoints: [
            "af-south-1": "resiliencehub.af-south-1.api.aws",
            "ap-east-1": "resiliencehub.ap-east-1.api.aws",
            "ap-northeast-1": "resiliencehub.ap-northeast-1.api.aws",
            "ap-northeast-2": "resiliencehub.ap-northeast-2.api.aws",
            "ap-south-1": "resiliencehub.ap-south-1.api.aws",
            "ap-southeast-1": "resiliencehub.ap-southeast-1.api.aws",
            "ap-southeast-2": "resiliencehub.ap-southeast-2.api.aws",
            "ca-central-1": "resiliencehub.ca-central-1.api.aws",
            "eu-central-1": "resiliencehub.eu-central-1.api.aws",
            "eu-north-1": "resiliencehub.eu-north-1.api.aws",
            "eu-south-1": "resiliencehub.eu-south-1.api.aws",
            "eu-west-1": "resiliencehub.eu-west-1.api.aws",
            "eu-west-2": "resiliencehub.eu-west-2.api.aws",
            "eu-west-3": "resiliencehub.eu-west-3.api.aws",
            "me-south-1": "resiliencehub.me-south-1.api.aws",
            "sa-east-1": "resiliencehub.sa-east-1.api.aws",
            "us-east-1": "resiliencehub.us-east-1.api.aws",
            "us-east-2": "resiliencehub.us-east-2.api.aws",
            "us-gov-east-1": "resiliencehub.us-gov-east-1.api.aws",
            "us-gov-west-1": "resiliencehub.us-gov-west-1.api.aws",
            "us-west-1": "resiliencehub.us-west-1.api.aws",
            "us-west-2": "resiliencehub.us-west-2.api.aws"
        ]),
        [.dualstack, .fips]: .init(endpoints: [
            "us-gov-east-1": "resiliencehub-fips.us-gov-east-1.api.aws",
            "us-gov-west-1": "resiliencehub-fips.us-gov-west-1.api.aws"
        ]),
        [.fips]: .init(endpoints: [
            "us-gov-east-1": "resiliencehub-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "resiliencehub-fips.us-gov-west-1.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Accepts the resource grouping recommendations suggested by Resilience Hub for your application.
    @Sendable
    @inlinable
    public func acceptResourceGroupingRecommendations(_ input: AcceptResourceGroupingRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptResourceGroupingRecommendationsResponse {
        try await self.client.execute(
            operation: "AcceptResourceGroupingRecommendations", 
            path: "/accept-resource-grouping-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Accepts the resource grouping recommendations suggested by Resilience Hub for your application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - entries: List of resource grouping recommendations you want to include in your application.
    ///   - logger: Logger use during operation
    @inlinable
    public func acceptResourceGroupingRecommendations(
        appArn: String,
        entries: [AcceptGroupingRecommendationEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptResourceGroupingRecommendationsResponse {
        let input = AcceptResourceGroupingRecommendationsRequest(
            appArn: appArn, 
            entries: entries
        )
        return try await self.acceptResourceGroupingRecommendations(input, logger: logger)
    }

    /// Adds the source of resource-maps to the draft version of an application. During assessment, Resilience Hub will use these resource-maps to resolve the latest physical ID for each resource in the application template. For more information about different types of resources supported by Resilience Hub and how to add them in your application, see Step 2: How is your application managed? in the Resilience Hub User Guide.
    @Sendable
    @inlinable
    public func addDraftAppVersionResourceMappings(_ input: AddDraftAppVersionResourceMappingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddDraftAppVersionResourceMappingsResponse {
        try await self.client.execute(
            operation: "AddDraftAppVersionResourceMappings", 
            path: "/add-draft-app-version-resource-mappings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds the source of resource-maps to the draft version of an application. During assessment, Resilience Hub will use these resource-maps to resolve the latest physical ID for each resource in the application template. For more information about different types of resources supported by Resilience Hub and how to add them in your application, see Step 2: How is your application managed? in the Resilience Hub User Guide.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - resourceMappings: Mappings used to map logical resources from the template to physical resources. You can use the mapping type CFN_STACK if the application template uses a logical stack name. Or you can map individual resources by using the mapping type RESOURCE. We recommend using the mapping type CFN_STACK if the application is backed by a CloudFormation stack.
    ///   - logger: Logger use during operation
    @inlinable
    public func addDraftAppVersionResourceMappings(
        appArn: String,
        resourceMappings: [ResourceMapping],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddDraftAppVersionResourceMappingsResponse {
        let input = AddDraftAppVersionResourceMappingsRequest(
            appArn: appArn, 
            resourceMappings: resourceMappings
        )
        return try await self.addDraftAppVersionResourceMappings(input, logger: logger)
    }

    /// Enables you to include or exclude one or more operational recommendations.
    @Sendable
    @inlinable
    public func batchUpdateRecommendationStatus(_ input: BatchUpdateRecommendationStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchUpdateRecommendationStatusResponse {
        try await self.client.execute(
            operation: "BatchUpdateRecommendationStatus", 
            path: "/batch-update-recommendation-status", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables you to include or exclude one or more operational recommendations.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - requestEntries: Defines the list of operational recommendations that need to be included or excluded.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchUpdateRecommendationStatus(
        appArn: String,
        requestEntries: [UpdateRecommendationStatusRequestEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchUpdateRecommendationStatusResponse {
        let input = BatchUpdateRecommendationStatusRequest(
            appArn: appArn, 
            requestEntries: requestEntries
        )
        return try await self.batchUpdateRecommendationStatus(input, logger: logger)
    }

    /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe a Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. In addition, you can also add resources that are located on Amazon Elastic Kubernetes Service (Amazon EKS) clusters as optional resources. For more information about the number of resources supported per application, see Service quotas. After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO).
    @Sendable
    @inlinable
    public func createApp(_ input: CreateAppRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAppResponse {
        try await self.client.execute(
            operation: "CreateApp", 
            path: "/create-app", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe a Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. In addition, you can also add resources that are located on Amazon Elastic Kubernetes Service (Amazon EKS) clusters as optional resources. For more information about the number of resources supported per application, see Service quotas. After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO).
    ///
    /// Parameters:
    ///   - assessmentSchedule:  Assessment execution schedule with 'Daily' or 'Disabled' values.
    ///   - awsApplicationArn: Amazon Resource Name (ARN) of  Resource Groups group that is integrated with an AppRegistry application. For more information about ARNs,
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - description: The optional description for an app.
    ///   - eventSubscriptions: The list of events you would like to subscribe and get notification for. Currently, Resilience Hub supports only Drift detected and Scheduled assessment failure events notification.
    ///   - name: Name of the application.
    ///   - permissionModel: Defines the roles and credentials that Resilience Hub would use while creating the application, importing its resources, and running an assessment.
    ///   - policyArn: Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is:
    ///   - tags: Tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createApp(
        assessmentSchedule: AppAssessmentScheduleType? = nil,
        awsApplicationArn: String? = nil,
        clientToken: String? = CreateAppRequest.idempotencyToken(),
        description: String? = nil,
        eventSubscriptions: [EventSubscription]? = nil,
        name: String,
        permissionModel: PermissionModel? = nil,
        policyArn: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAppResponse {
        let input = CreateAppRequest(
            assessmentSchedule: assessmentSchedule, 
            awsApplicationArn: awsApplicationArn, 
            clientToken: clientToken, 
            description: description, 
            eventSubscriptions: eventSubscriptions, 
            name: name, 
            permissionModel: permissionModel, 
            policyArn: policyArn, 
            tags: tags
        )
        return try await self.createApp(input, logger: logger)
    }

    /// Creates a new Application Component in the Resilience Hub application.  This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    @Sendable
    @inlinable
    public func createAppVersionAppComponent(_ input: CreateAppVersionAppComponentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAppVersionAppComponentResponse {
        try await self.client.execute(
            operation: "CreateAppVersionAppComponent", 
            path: "/create-app-version-app-component", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Application Component in the Resilience Hub application.  This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    ///
    /// Parameters:
    ///   - additionalInfo: Currently, there is no supported additional information for Application Components.
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - id: Identifier of the Application Component.
    ///   - name: Name of the Application Component.
    ///   - type: Type of Application Component. For more information about the types of Application Component, see Grouping resources in an AppComponent.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAppVersionAppComponent(
        additionalInfo: [String: [String]]? = nil,
        appArn: String,
        clientToken: String? = CreateAppVersionAppComponentRequest.idempotencyToken(),
        id: String? = nil,
        name: String,
        type: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAppVersionAppComponentResponse {
        let input = CreateAppVersionAppComponentRequest(
            additionalInfo: additionalInfo, 
            appArn: appArn, 
            clientToken: clientToken, 
            id: id, 
            name: name, 
            type: type
        )
        return try await self.createAppVersionAppComponent(input, logger: logger)
    }

    /// Adds a resource to the Resilience Hub application and assigns it to the specified Application Components. If you specify a new Application Component, Resilience Hub will automatically create the Application Component.    This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   To update application version with new physicalResourceID, you must call ResolveAppVersionResources API.
    @Sendable
    @inlinable
    public func createAppVersionResource(_ input: CreateAppVersionResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAppVersionResourceResponse {
        try await self.client.execute(
            operation: "CreateAppVersionResource", 
            path: "/create-app-version-resource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a resource to the Resilience Hub application and assigns it to the specified Application Components. If you specify a new Application Component, Resilience Hub will automatically create the Application Component.    This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   To update application version with new physicalResourceID, you must call ResolveAppVersionResources API.
    ///
    /// Parameters:
    ///   - additionalInfo: Currently, there is no supported additional information for resources.
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appComponents: List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added.
    ///   - awsAccountId: Amazon Web Services account that owns the physical resource.
    ///   - awsRegion: Amazon Web Services region that owns the physical resource.
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - logicalResourceId: Logical identifier of the resource.
    ///   - physicalResourceId: Physical identifier of the resource.
    ///   - resourceName: Name of the resource.
    ///   - resourceType: Type of resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAppVersionResource(
        additionalInfo: [String: [String]]? = nil,
        appArn: String,
        appComponents: [String],
        awsAccountId: String? = nil,
        awsRegion: String? = nil,
        clientToken: String? = CreateAppVersionResourceRequest.idempotencyToken(),
        logicalResourceId: LogicalResourceId,
        physicalResourceId: String,
        resourceName: String? = nil,
        resourceType: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAppVersionResourceResponse {
        let input = CreateAppVersionResourceRequest(
            additionalInfo: additionalInfo, 
            appArn: appArn, 
            appComponents: appComponents, 
            awsAccountId: awsAccountId, 
            awsRegion: awsRegion, 
            clientToken: clientToken, 
            logicalResourceId: logicalResourceId, 
            physicalResourceId: physicalResourceId, 
            resourceName: resourceName, 
            resourceType: resourceType
        )
        return try await self.createAppVersionResource(input, logger: logger)
    }

    /// Creates a new recommendation template for the Resilience Hub application.
    @Sendable
    @inlinable
    public func createRecommendationTemplate(_ input: CreateRecommendationTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRecommendationTemplateResponse {
        try await self.client.execute(
            operation: "CreateRecommendationTemplate", 
            path: "/create-recommendation-template", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new recommendation template for the Resilience Hub application.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - bucketName: The name of the Amazon S3 bucket that will contain the recommendation template.
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - format: The format for the recommendation template.  CfnJson  The template is CloudFormation JSON.  CfnYaml  The template is CloudFormation YAML.
    ///   - name: The name for the recommendation template.
    ///   - recommendationIds: Identifiers for the recommendations used to create a recommendation template.
    ///   - recommendationTypes: An array of strings that specify the recommendation template type or types.  Alarm  The template is an AlarmRecommendation template.  Sop  The template is a SopRecommendation template.  Test  The template is a TestRecommendation template.
    ///   - tags: Tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRecommendationTemplate(
        assessmentArn: String,
        bucketName: String? = nil,
        clientToken: String? = CreateRecommendationTemplateRequest.idempotencyToken(),
        format: TemplateFormat? = nil,
        name: String,
        recommendationIds: [String]? = nil,
        recommendationTypes: [RenderRecommendationType]? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRecommendationTemplateResponse {
        let input = CreateRecommendationTemplateRequest(
            assessmentArn: assessmentArn, 
            bucketName: bucketName, 
            clientToken: clientToken, 
            format: format, 
            name: name, 
            recommendationIds: recommendationIds, 
            recommendationTypes: recommendationTypes, 
            tags: tags
        )
        return try await self.createRecommendationTemplate(input, logger: logger)
    }

    /// Creates a resiliency policy for an application.  Resilience Hub allows you to provide a value of zero for rtoInSecs and rpoInSecs of your resiliency policy. But, while assessing your application, the lowest possible assessment result is near zero. Hence, if you provide value zero for rtoInSecs and rpoInSecs, the estimated workload RTO and estimated workload RPO result will be near zero and the Compliance status for your application will be set to Policy breached.
    @Sendable
    @inlinable
    public func createResiliencyPolicy(_ input: CreateResiliencyPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateResiliencyPolicyResponse {
        try await self.client.execute(
            operation: "CreateResiliencyPolicy", 
            path: "/create-resiliency-policy", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a resiliency policy for an application.  Resilience Hub allows you to provide a value of zero for rtoInSecs and rpoInSecs of your resiliency policy. But, while assessing your application, the lowest possible assessment result is near zero. Hence, if you provide value zero for rtoInSecs and rpoInSecs, the estimated workload RTO and estimated workload RPO result will be near zero and the Compliance status for your application will be set to Policy breached.
    ///
    /// Parameters:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - dataLocationConstraint: Specifies a high-level geographical location constraint for where your resilience policy data can be stored.
    ///   - policy: The type of resiliency policy to be created, including the recovery time objective (RTO) and recovery point objective (RPO) in seconds.
    ///   - policyDescription: Description of the resiliency policy.
    ///   - policyName: Name of the resiliency policy.
    ///   - tags: Tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource.
    ///   - tier: The tier for this resiliency policy, ranging from the highest severity (MissionCritical) to lowest (NonCritical).
    ///   - logger: Logger use during operation
    @inlinable
    public func createResiliencyPolicy(
        clientToken: String? = CreateResiliencyPolicyRequest.idempotencyToken(),
        dataLocationConstraint: DataLocationConstraint? = nil,
        policy: [DisruptionType: FailurePolicy],
        policyDescription: String? = nil,
        policyName: String,
        tags: [String: String]? = nil,
        tier: ResiliencyPolicyTier,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateResiliencyPolicyResponse {
        let input = CreateResiliencyPolicyRequest(
            clientToken: clientToken, 
            dataLocationConstraint: dataLocationConstraint, 
            policy: policy, 
            policyDescription: policyDescription, 
            policyName: policyName, 
            tags: tags, 
            tier: tier
        )
        return try await self.createResiliencyPolicy(input, logger: logger)
    }

    /// Deletes an Resilience Hub application. This is a destructive action that can't be undone.
    @Sendable
    @inlinable
    public func deleteApp(_ input: DeleteAppRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAppResponse {
        try await self.client.execute(
            operation: "DeleteApp", 
            path: "/delete-app", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Resilience Hub application. This is a destructive action that can't be undone.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - forceDelete: A boolean option to force the deletion of an Resilience Hub application.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApp(
        appArn: String,
        clientToken: String? = DeleteAppRequest.idempotencyToken(),
        forceDelete: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAppResponse {
        let input = DeleteAppRequest(
            appArn: appArn, 
            clientToken: clientToken, 
            forceDelete: forceDelete
        )
        return try await self.deleteApp(input, logger: logger)
    }

    /// Deletes an Resilience Hub application assessment. This is a destructive action that can't be undone.
    @Sendable
    @inlinable
    public func deleteAppAssessment(_ input: DeleteAppAssessmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAppAssessmentResponse {
        try await self.client.execute(
            operation: "DeleteAppAssessment", 
            path: "/delete-app-assessment", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Resilience Hub application assessment. This is a destructive action that can't be undone.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAppAssessment(
        assessmentArn: String,
        clientToken: String? = DeleteAppAssessmentRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAppAssessmentResponse {
        let input = DeleteAppAssessmentRequest(
            assessmentArn: assessmentArn, 
            clientToken: clientToken
        )
        return try await self.deleteAppAssessment(input, logger: logger)
    }

    /// Deletes the input source and all of its imported resources from the Resilience Hub application.
    @Sendable
    @inlinable
    public func deleteAppInputSource(_ input: DeleteAppInputSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAppInputSourceResponse {
        try await self.client.execute(
            operation: "DeleteAppInputSource", 
            path: "/delete-app-input-source", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the input source and all of its imported resources from the Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - eksSourceClusterNamespace: The namespace on your Amazon Elastic Kubernetes Service cluster that you want to delete from the Resilience Hub application.
    ///   - sourceArn: The Amazon Resource Name (ARN) of the imported resource you want to remove from the Resilience Hub application. For more information about ARNs,
    ///   - terraformSource: The imported Terraform s3 state ﬁle you want to remove from the Resilience Hub application.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAppInputSource(
        appArn: String,
        clientToken: String? = DeleteAppInputSourceRequest.idempotencyToken(),
        eksSourceClusterNamespace: EksSourceClusterNamespace? = nil,
        sourceArn: String? = nil,
        terraformSource: TerraformSource? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAppInputSourceResponse {
        let input = DeleteAppInputSourceRequest(
            appArn: appArn, 
            clientToken: clientToken, 
            eksSourceClusterNamespace: eksSourceClusterNamespace, 
            sourceArn: sourceArn, 
            terraformSource: terraformSource
        )
        return try await self.deleteAppInputSource(input, logger: logger)
    }

    /// Deletes an Application Component from the Resilience Hub application.    This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   You will not be able to delete an Application Component if it has resources associated with it.
    @Sendable
    @inlinable
    public func deleteAppVersionAppComponent(_ input: DeleteAppVersionAppComponentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAppVersionAppComponentResponse {
        try await self.client.execute(
            operation: "DeleteAppVersionAppComponent", 
            path: "/delete-app-version-app-component", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Application Component from the Resilience Hub application.    This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   You will not be able to delete an Application Component if it has resources associated with it.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - id: Identifier of the Application Component.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAppVersionAppComponent(
        appArn: String,
        clientToken: String? = DeleteAppVersionAppComponentRequest.idempotencyToken(),
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAppVersionAppComponentResponse {
        let input = DeleteAppVersionAppComponentRequest(
            appArn: appArn, 
            clientToken: clientToken, 
            id: id
        )
        return try await self.deleteAppVersionAppComponent(input, logger: logger)
    }

    /// Deletes a resource from the Resilience Hub application.    You can only delete a manually added resource. To exclude non-manually added resources, use the UpdateAppVersionResource API.   This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    @Sendable
    @inlinable
    public func deleteAppVersionResource(_ input: DeleteAppVersionResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAppVersionResourceResponse {
        try await self.client.execute(
            operation: "DeleteAppVersionResource", 
            path: "/delete-app-version-resource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a resource from the Resilience Hub application.    You can only delete a manually added resource. To exclude non-manually added resources, use the UpdateAppVersionResource API.   This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - awsAccountId: Amazon Web Services account that owns the physical resource.
    ///   - awsRegion: Amazon Web Services region that owns the physical resource.
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - logicalResourceId: Logical identifier of the resource.
    ///   - physicalResourceId: Physical identifier of the resource.
    ///   - resourceName: Name of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAppVersionResource(
        appArn: String,
        awsAccountId: String? = nil,
        awsRegion: String? = nil,
        clientToken: String? = DeleteAppVersionResourceRequest.idempotencyToken(),
        logicalResourceId: LogicalResourceId? = nil,
        physicalResourceId: String? = nil,
        resourceName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAppVersionResourceResponse {
        let input = DeleteAppVersionResourceRequest(
            appArn: appArn, 
            awsAccountId: awsAccountId, 
            awsRegion: awsRegion, 
            clientToken: clientToken, 
            logicalResourceId: logicalResourceId, 
            physicalResourceId: physicalResourceId, 
            resourceName: resourceName
        )
        return try await self.deleteAppVersionResource(input, logger: logger)
    }

    /// Deletes a recommendation template. This is a destructive action that can't be undone.
    @Sendable
    @inlinable
    public func deleteRecommendationTemplate(_ input: DeleteRecommendationTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRecommendationTemplateResponse {
        try await self.client.execute(
            operation: "DeleteRecommendationTemplate", 
            path: "/delete-recommendation-template", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a recommendation template. This is a destructive action that can't be undone.
    ///
    /// Parameters:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - recommendationTemplateArn: The Amazon Resource Name (ARN) for a recommendation template.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRecommendationTemplate(
        clientToken: String? = DeleteRecommendationTemplateRequest.idempotencyToken(),
        recommendationTemplateArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRecommendationTemplateResponse {
        let input = DeleteRecommendationTemplateRequest(
            clientToken: clientToken, 
            recommendationTemplateArn: recommendationTemplateArn
        )
        return try await self.deleteRecommendationTemplate(input, logger: logger)
    }

    /// Deletes a resiliency policy. This is a destructive action that can't be undone.
    @Sendable
    @inlinable
    public func deleteResiliencyPolicy(_ input: DeleteResiliencyPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteResiliencyPolicyResponse {
        try await self.client.execute(
            operation: "DeleteResiliencyPolicy", 
            path: "/delete-resiliency-policy", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a resiliency policy. This is a destructive action that can't be undone.
    ///
    /// Parameters:
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - policyArn: Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResiliencyPolicy(
        clientToken: String? = DeleteResiliencyPolicyRequest.idempotencyToken(),
        policyArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteResiliencyPolicyResponse {
        let input = DeleteResiliencyPolicyRequest(
            clientToken: clientToken, 
            policyArn: policyArn
        )
        return try await self.deleteResiliencyPolicy(input, logger: logger)
    }

    /// Describes an Resilience Hub application.
    @Sendable
    @inlinable
    public func describeApp(_ input: DescribeAppRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppResponse {
        try await self.client.execute(
            operation: "DescribeApp", 
            path: "/describe-app", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes an Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeApp(
        appArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppResponse {
        let input = DescribeAppRequest(
            appArn: appArn
        )
        return try await self.describeApp(input, logger: logger)
    }

    /// Describes an assessment for an Resilience Hub application.
    @Sendable
    @inlinable
    public func describeAppAssessment(_ input: DescribeAppAssessmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppAssessmentResponse {
        try await self.client.execute(
            operation: "DescribeAppAssessment", 
            path: "/describe-app-assessment", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes an assessment for an Resilience Hub application.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppAssessment(
        assessmentArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppAssessmentResponse {
        let input = DescribeAppAssessmentRequest(
            assessmentArn: assessmentArn
        )
        return try await self.describeAppAssessment(input, logger: logger)
    }

    /// Describes the Resilience Hub application version.
    @Sendable
    @inlinable
    public func describeAppVersion(_ input: DescribeAppVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppVersionResponse {
        try await self.client.execute(
            operation: "DescribeAppVersion", 
            path: "/describe-app-version", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the Resilience Hub application version.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Resilience Hub application version.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppVersion(
        appArn: String,
        appVersion: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppVersionResponse {
        let input = DescribeAppVersionRequest(
            appArn: appArn, 
            appVersion: appVersion
        )
        return try await self.describeAppVersion(input, logger: logger)
    }

    /// Describes an Application Component in the Resilience Hub application.
    @Sendable
    @inlinable
    public func describeAppVersionAppComponent(_ input: DescribeAppVersionAppComponentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppVersionAppComponentResponse {
        try await self.client.execute(
            operation: "DescribeAppVersionAppComponent", 
            path: "/describe-app-version-app-component", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes an Application Component in the Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Resilience Hub application version.
    ///   - id: Identifier of the Application Component.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppVersionAppComponent(
        appArn: String,
        appVersion: String,
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppVersionAppComponentResponse {
        let input = DescribeAppVersionAppComponentRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            id: id
        )
        return try await self.describeAppVersionAppComponent(input, logger: logger)
    }

    /// Describes a resource of the Resilience Hub application.  This API accepts only one of the following parameters to describe the resource:    resourceName     logicalResourceId     physicalResourceId (Along with physicalResourceId, you can also provide awsAccountId, and awsRegion)
    @Sendable
    @inlinable
    public func describeAppVersionResource(_ input: DescribeAppVersionResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppVersionResourceResponse {
        try await self.client.execute(
            operation: "DescribeAppVersionResource", 
            path: "/describe-app-version-resource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a resource of the Resilience Hub application.  This API accepts only one of the following parameters to describe the resource:    resourceName     logicalResourceId     physicalResourceId (Along with physicalResourceId, you can also provide awsAccountId, and awsRegion)
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Resilience Hub application version.
    ///   - awsAccountId: Amazon Web Services account that owns the physical resource.
    ///   - awsRegion: Amazon Web Services region that owns the physical resource.
    ///   - logicalResourceId: Logical identifier of the resource.
    ///   - physicalResourceId: Physical identifier of the resource.
    ///   - resourceName: Name of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppVersionResource(
        appArn: String,
        appVersion: String,
        awsAccountId: String? = nil,
        awsRegion: String? = nil,
        logicalResourceId: LogicalResourceId? = nil,
        physicalResourceId: String? = nil,
        resourceName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppVersionResourceResponse {
        let input = DescribeAppVersionResourceRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            awsAccountId: awsAccountId, 
            awsRegion: awsRegion, 
            logicalResourceId: logicalResourceId, 
            physicalResourceId: physicalResourceId, 
            resourceName: resourceName
        )
        return try await self.describeAppVersionResource(input, logger: logger)
    }

    /// Returns the resolution status for the specified resolution identifier for an application version. If resolutionId is not specified, the current resolution status is returned.
    @Sendable
    @inlinable
    public func describeAppVersionResourcesResolutionStatus(_ input: DescribeAppVersionResourcesResolutionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppVersionResourcesResolutionStatusResponse {
        try await self.client.execute(
            operation: "DescribeAppVersionResourcesResolutionStatus", 
            path: "/describe-app-version-resources-resolution-status", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the resolution status for the specified resolution identifier for an application version. If resolutionId is not specified, the current resolution status is returned.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - resolutionId: The identifier for a specific resolution.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppVersionResourcesResolutionStatus(
        appArn: String,
        appVersion: String,
        resolutionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppVersionResourcesResolutionStatusResponse {
        let input = DescribeAppVersionResourcesResolutionStatusRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            resolutionId: resolutionId
        )
        return try await self.describeAppVersionResourcesResolutionStatus(input, logger: logger)
    }

    /// Describes details about an Resilience Hub application.
    @Sendable
    @inlinable
    public func describeAppVersionTemplate(_ input: DescribeAppVersionTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAppVersionTemplateResponse {
        try await self.client.execute(
            operation: "DescribeAppVersionTemplate", 
            path: "/describe-app-version-template", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes details about an Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAppVersionTemplate(
        appArn: String,
        appVersion: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAppVersionTemplateResponse {
        let input = DescribeAppVersionTemplateRequest(
            appArn: appArn, 
            appVersion: appVersion
        )
        return try await self.describeAppVersionTemplate(input, logger: logger)
    }

    /// Describes the status of importing resources to an application version.  If you get a 404 error with ResourceImportStatusNotFoundAppMetadataException, you must call importResourcesToDraftAppVersion after creating the application and before calling describeDraftAppVersionResourcesImportStatus to obtain the status.
    @Sendable
    @inlinable
    public func describeDraftAppVersionResourcesImportStatus(_ input: DescribeDraftAppVersionResourcesImportStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDraftAppVersionResourcesImportStatusResponse {
        try await self.client.execute(
            operation: "DescribeDraftAppVersionResourcesImportStatus", 
            path: "/describe-draft-app-version-resources-import-status", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the status of importing resources to an application version.  If you get a 404 error with ResourceImportStatusNotFoundAppMetadataException, you must call importResourcesToDraftAppVersion after creating the application and before calling describeDraftAppVersionResourcesImportStatus to obtain the status.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDraftAppVersionResourcesImportStatus(
        appArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDraftAppVersionResourcesImportStatusResponse {
        let input = DescribeDraftAppVersionResourcesImportStatusRequest(
            appArn: appArn
        )
        return try await self.describeDraftAppVersionResourcesImportStatus(input, logger: logger)
    }

    /// Describes the metrics of the application configuration being exported.
    @Sendable
    @inlinable
    public func describeMetricsExport(_ input: DescribeMetricsExportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMetricsExportResponse {
        try await self.client.execute(
            operation: "DescribeMetricsExport", 
            path: "/describe-metrics-export", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the metrics of the application configuration being exported.
    ///
    /// Parameters:
    ///   - metricsExportId: Identifier of the metrics export task.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMetricsExport(
        metricsExportId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMetricsExportResponse {
        let input = DescribeMetricsExportRequest(
            metricsExportId: metricsExportId
        )
        return try await self.describeMetricsExport(input, logger: logger)
    }

    /// Describes a specified resiliency policy for an Resilience Hub application. The returned policy object includes creation time, data location constraints, the Amazon Resource Name (ARN) for the policy, tags, tier, and more.
    @Sendable
    @inlinable
    public func describeResiliencyPolicy(_ input: DescribeResiliencyPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResiliencyPolicyResponse {
        try await self.client.execute(
            operation: "DescribeResiliencyPolicy", 
            path: "/describe-resiliency-policy", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a specified resiliency policy for an Resilience Hub application. The returned policy object includes creation time, data location constraints, the Amazon Resource Name (ARN) for the policy, tags, tier, and more.
    ///
    /// Parameters:
    ///   - policyArn: Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResiliencyPolicy(
        policyArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResiliencyPolicyResponse {
        let input = DescribeResiliencyPolicyRequest(
            policyArn: policyArn
        )
        return try await self.describeResiliencyPolicy(input, logger: logger)
    }

    /// Describes the resource grouping recommendation tasks run by Resilience Hub for your application.
    @Sendable
    @inlinable
    public func describeResourceGroupingRecommendationTask(_ input: DescribeResourceGroupingRecommendationTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResourceGroupingRecommendationTaskResponse {
        try await self.client.execute(
            operation: "DescribeResourceGroupingRecommendationTask", 
            path: "/describe-resource-grouping-recommendation-task", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the resource grouping recommendation tasks run by Resilience Hub for your application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - groupingId: Identifier of the grouping recommendation task.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResourceGroupingRecommendationTask(
        appArn: String,
        groupingId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResourceGroupingRecommendationTaskResponse {
        let input = DescribeResourceGroupingRecommendationTaskRequest(
            appArn: appArn, 
            groupingId: groupingId
        )
        return try await self.describeResourceGroupingRecommendationTask(input, logger: logger)
    }

    /// Imports resources to Resilience Hub application draft version from different input sources. For more information about the input sources supported by Resilience Hub, see Discover the structure and describe your Resilience Hub application.
    @Sendable
    @inlinable
    public func importResourcesToDraftAppVersion(_ input: ImportResourcesToDraftAppVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ImportResourcesToDraftAppVersionResponse {
        try await self.client.execute(
            operation: "ImportResourcesToDraftAppVersion", 
            path: "/import-resources-to-draft-app-version", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Imports resources to Resilience Hub application draft version from different input sources. For more information about the input sources supported by Resilience Hub, see Discover the structure and describe your Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - eksSources: The input sources of the Amazon Elastic Kubernetes Service resources you need to import.
    ///   - importStrategy: The import strategy you would like to set to import resources into Resilience Hub application.
    ///   - sourceArns: The Amazon Resource Names (ARNs) for the resources.
    ///   - terraformSources:  A list of terraform file s3 URLs you need to import.
    ///   - logger: Logger use during operation
    @inlinable
    public func importResourcesToDraftAppVersion(
        appArn: String,
        eksSources: [EksSource]? = nil,
        importStrategy: ResourceImportStrategyType? = nil,
        sourceArns: [String]? = nil,
        terraformSources: [TerraformSource]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ImportResourcesToDraftAppVersionResponse {
        let input = ImportResourcesToDraftAppVersionRequest(
            appArn: appArn, 
            eksSources: eksSources, 
            importStrategy: importStrategy, 
            sourceArns: sourceArns, 
            terraformSources: terraformSources
        )
        return try await self.importResourcesToDraftAppVersion(input, logger: logger)
    }

    /// Lists the alarm recommendations for an Resilience Hub application.
    @Sendable
    @inlinable
    public func listAlarmRecommendations(_ input: ListAlarmRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAlarmRecommendationsResponse {
        try await self.client.execute(
            operation: "ListAlarmRecommendations", 
            path: "/list-alarm-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the alarm recommendations for an Resilience Hub application.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAlarmRecommendations(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAlarmRecommendationsResponse {
        let input = ListAlarmRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAlarmRecommendations(input, logger: logger)
    }

    /// List of compliance drifts that were detected while running an assessment.
    @Sendable
    @inlinable
    public func listAppAssessmentComplianceDrifts(_ input: ListAppAssessmentComplianceDriftsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppAssessmentComplianceDriftsResponse {
        try await self.client.execute(
            operation: "ListAppAssessmentComplianceDrifts", 
            path: "/list-app-assessment-compliance-drifts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List of compliance drifts that were detected while running an assessment.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of compliance drifts requested.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppAssessmentComplianceDrifts(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppAssessmentComplianceDriftsResponse {
        let input = ListAppAssessmentComplianceDriftsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppAssessmentComplianceDrifts(input, logger: logger)
    }

    /// List of resource drifts that were detected while running an assessment.
    @Sendable
    @inlinable
    public func listAppAssessmentResourceDrifts(_ input: ListAppAssessmentResourceDriftsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppAssessmentResourceDriftsResponse {
        try await self.client.execute(
            operation: "ListAppAssessmentResourceDrifts", 
            path: "/list-app-assessment-resource-drifts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List of resource drifts that were detected while running an assessment.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of drift results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppAssessmentResourceDrifts(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppAssessmentResourceDriftsResponse {
        let input = ListAppAssessmentResourceDriftsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppAssessmentResourceDrifts(input, logger: logger)
    }

    /// Lists the assessments for an Resilience Hub application. You can use request parameters to refine the results for the response object.
    @Sendable
    @inlinable
    public func listAppAssessments(_ input: ListAppAssessmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppAssessmentsResponse {
        try await self.client.execute(
            operation: "ListAppAssessments", 
            path: "/list-app-assessments", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the assessments for an Resilience Hub application. You can use request parameters to refine the results for the response object.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - assessmentName: The name for the assessment.
    ///   - assessmentStatus: The current status of the assessment for the resiliency policy.
    ///   - complianceStatus: The current status of compliance for the resiliency policy.
    ///   - invoker: Specifies the entity that invoked a specific assessment, either a User or the System.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - reverseOrder: The default is to sort by ascending startTime.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppAssessments(
        appArn: String? = nil,
        assessmentName: String? = nil,
        assessmentStatus: [AssessmentStatus]? = nil,
        complianceStatus: ComplianceStatus? = nil,
        invoker: AssessmentInvoker? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        reverseOrder: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppAssessmentsResponse {
        let input = ListAppAssessmentsRequest(
            appArn: appArn, 
            assessmentName: assessmentName, 
            assessmentStatus: assessmentStatus, 
            complianceStatus: complianceStatus, 
            invoker: invoker, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            reverseOrder: reverseOrder
        )
        return try await self.listAppAssessments(input, logger: logger)
    }

    /// Lists the compliances for an Resilience Hub Application Component.
    @Sendable
    @inlinable
    public func listAppComponentCompliances(_ input: ListAppComponentCompliancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppComponentCompliancesResponse {
        try await self.client.execute(
            operation: "ListAppComponentCompliances", 
            path: "/list-app-component-compliances", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the compliances for an Resilience Hub Application Component.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppComponentCompliances(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppComponentCompliancesResponse {
        let input = ListAppComponentCompliancesRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppComponentCompliances(input, logger: logger)
    }

    /// Lists the recommendations for an Resilience Hub Application Component.
    @Sendable
    @inlinable
    public func listAppComponentRecommendations(_ input: ListAppComponentRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppComponentRecommendationsResponse {
        try await self.client.execute(
            operation: "ListAppComponentRecommendations", 
            path: "/list-app-component-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the recommendations for an Resilience Hub Application Component.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppComponentRecommendations(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppComponentRecommendationsResponse {
        let input = ListAppComponentRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppComponentRecommendations(input, logger: logger)
    }

    /// Lists all the input sources of the Resilience Hub application. For more information about the input sources supported by Resilience Hub, see Discover the structure and describe your Resilience Hub application.
    @Sendable
    @inlinable
    public func listAppInputSources(_ input: ListAppInputSourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppInputSourcesResponse {
        try await self.client.execute(
            operation: "ListAppInputSources", 
            path: "/list-app-input-sources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the input sources of the Resilience Hub application. For more information about the input sources supported by Resilience Hub, see Discover the structure and describe your Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Resilience Hub application version.
    ///   - maxResults: Maximum number of input sources to be displayed per Resilience Hub application.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppInputSources(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppInputSourcesResponse {
        let input = ListAppInputSourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppInputSources(input, logger: logger)
    }

    /// Lists all the Application Components in the Resilience Hub application.
    @Sendable
    @inlinable
    public func listAppVersionAppComponents(_ input: ListAppVersionAppComponentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppVersionAppComponentsResponse {
        try await self.client.execute(
            operation: "ListAppVersionAppComponents", 
            path: "/list-app-version-app-components", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the Application Components in the Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Version of the Application Component.
    ///   - maxResults: Maximum number of Application Components to be displayed per Resilience Hub application version.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppVersionAppComponents(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppVersionAppComponentsResponse {
        let input = ListAppVersionAppComponentsRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppVersionAppComponents(input, logger: logger)
    }

    /// Lists how the resources in an application version are mapped/sourced from. Mappings can be physical resource identifiers, CloudFormation stacks, resource-groups, or an application registry app.
    @Sendable
    @inlinable
    public func listAppVersionResourceMappings(_ input: ListAppVersionResourceMappingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppVersionResourceMappingsResponse {
        try await self.client.execute(
            operation: "ListAppVersionResourceMappings", 
            path: "/list-app-version-resource-mappings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists how the resources in an application version are mapped/sourced from. Mappings can be physical resource identifiers, CloudFormation stacks, resource-groups, or an application registry app.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppVersionResourceMappings(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppVersionResourceMappingsResponse {
        let input = ListAppVersionResourceMappingsRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAppVersionResourceMappings(input, logger: logger)
    }

    /// Lists all the resources in an Resilience Hub application.
    @Sendable
    @inlinable
    public func listAppVersionResources(_ input: ListAppVersionResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppVersionResourcesResponse {
        try await self.client.execute(
            operation: "ListAppVersionResources", 
            path: "/list-app-version-resources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the resources in an Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - resolutionId: The identifier for a specific resolution.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppVersionResources(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resolutionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppVersionResourcesResponse {
        let input = ListAppVersionResourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resolutionId: resolutionId
        )
        return try await self.listAppVersionResources(input, logger: logger)
    }

    /// Lists the different versions for the Resilience Hub applications.
    @Sendable
    @inlinable
    public func listAppVersions(_ input: ListAppVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppVersionsResponse {
        try await self.client.execute(
            operation: "ListAppVersions", 
            path: "/list-app-versions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the different versions for the Resilience Hub applications.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - endTime: Upper limit of the time range to filter the application versions.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - startTime: Lower limit of the time range to filter the application versions.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppVersions(
        appArn: String,
        endTime: Date? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppVersionsResponse {
        let input = ListAppVersionsRequest(
            appArn: appArn, 
            endTime: endTime, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            startTime: startTime
        )
        return try await self.listAppVersions(input, logger: logger)
    }

    /// Lists your Resilience Hub applications.  You can filter applications using only one filter at a time or without using any filter. If you try to filter applications using multiple filters, you will get the following error:  An error occurred (ValidationException) when calling the ListApps operation: Only one filter is supported for this operation.
    @Sendable
    @inlinable
    public func listApps(_ input: ListAppsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppsResponse {
        try await self.client.execute(
            operation: "ListApps", 
            path: "/list-apps", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists your Resilience Hub applications.  You can filter applications using only one filter at a time or without using any filter. If you try to filter applications using multiple filters, you will get the following error:  An error occurred (ValidationException) when calling the ListApps operation: Only one filter is supported for this operation.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - awsApplicationArn: Amazon Resource Name (ARN) of  Resource Groups group that is integrated with an AppRegistry application. For more information about ARNs,
    ///   - fromLastAssessmentTime: Lower limit of the range that is used to filter applications based on their last assessment times.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - name: The name for the one of the listed applications.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - reverseOrder: The application list is sorted based on the values of lastAppComplianceEvaluationTime field. By default, application list is sorted in ascending order. To sort the application list in descending order, set this field to True.
    ///   - toLastAssessmentTime: Upper limit of the range that is used to filter the applications based on their last assessment times.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApps(
        appArn: String? = nil,
        awsApplicationArn: String? = nil,
        fromLastAssessmentTime: Date? = nil,
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        reverseOrder: Bool? = nil,
        toLastAssessmentTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppsResponse {
        let input = ListAppsRequest(
            appArn: appArn, 
            awsApplicationArn: awsApplicationArn, 
            fromLastAssessmentTime: fromLastAssessmentTime, 
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            reverseOrder: reverseOrder, 
            toLastAssessmentTime: toLastAssessmentTime
        )
        return try await self.listApps(input, logger: logger)
    }

    /// Lists the metrics that can be exported.
    @Sendable
    @inlinable
    public func listMetrics(_ input: ListMetricsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMetricsResponse {
        try await self.client.execute(
            operation: "ListMetrics", 
            path: "/list-metrics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the metrics that can be exported.
    ///
    /// Parameters:
    ///   - conditions: Indicates the list of all the conditions that were applied on the metrics.
    ///   - dataSource: Indicates the data source of the metrics.
    ///   - fields: Indicates the list of fields in the data source.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - sorts: (Optional) Indicates the order in which you want to sort the fields in the metrics. By default, the fields are sorted in the ascending order.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMetrics(
        conditions: [Condition]? = nil,
        dataSource: String? = nil,
        fields: [Field]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sorts: [Sort]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMetricsResponse {
        let input = ListMetricsRequest(
            conditions: conditions, 
            dataSource: dataSource, 
            fields: fields, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sorts: sorts
        )
        return try await self.listMetrics(input, logger: logger)
    }

    /// Lists the recommendation templates for the Resilience Hub applications.
    @Sendable
    @inlinable
    public func listRecommendationTemplates(_ input: ListRecommendationTemplatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecommendationTemplatesResponse {
        try await self.client.execute(
            operation: "ListRecommendationTemplates", 
            path: "/list-recommendation-templates", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the recommendation templates for the Resilience Hub applications.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - name: The name for one of the listed recommendation templates.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - recommendationTemplateArn: The Amazon Resource Name (ARN) for a recommendation template.
    ///   - reverseOrder: The default is to sort by ascending startTime.
    ///   - status: Status of the action.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecommendationTemplates(
        assessmentArn: String? = nil,
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        recommendationTemplateArn: String? = nil,
        reverseOrder: Bool? = nil,
        status: [RecommendationTemplateStatus]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecommendationTemplatesResponse {
        let input = ListRecommendationTemplatesRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            recommendationTemplateArn: recommendationTemplateArn, 
            reverseOrder: reverseOrder, 
            status: status
        )
        return try await self.listRecommendationTemplates(input, logger: logger)
    }

    /// Lists the resiliency policies for the Resilience Hub applications.
    @Sendable
    @inlinable
    public func listResiliencyPolicies(_ input: ListResiliencyPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListResiliencyPoliciesResponse {
        try await self.client.execute(
            operation: "ListResiliencyPolicies", 
            path: "/list-resiliency-policies", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the resiliency policies for the Resilience Hub applications.
    ///
    /// Parameters:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - policyName: Name of the resiliency policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func listResiliencyPolicies(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        policyName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListResiliencyPoliciesResponse {
        let input = ListResiliencyPoliciesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            policyName: policyName
        )
        return try await self.listResiliencyPolicies(input, logger: logger)
    }

    /// Lists the resource grouping recommendations suggested by Resilience Hub for your application.
    @Sendable
    @inlinable
    public func listResourceGroupingRecommendations(_ input: ListResourceGroupingRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListResourceGroupingRecommendationsResponse {
        try await self.client.execute(
            operation: "ListResourceGroupingRecommendations", 
            path: "/list-resource-grouping-recommendations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the resource grouping recommendations suggested by Resilience Hub for your application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - maxResults: Maximum number of grouping recommendations to be displayed per Resilience Hub application.
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listResourceGroupingRecommendations(
        appArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListResourceGroupingRecommendationsResponse {
        let input = ListResourceGroupingRecommendationsRequest(
            appArn: appArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listResourceGroupingRecommendations(input, logger: logger)
    }

    /// Lists the standard operating procedure (SOP) recommendations for the Resilience Hub applications.
    @Sendable
    @inlinable
    public func listSopRecommendations(_ input: ListSopRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSopRecommendationsResponse {
        try await self.client.execute(
            operation: "ListSopRecommendations", 
            path: "/list-sop-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the standard operating procedure (SOP) recommendations for the Resilience Hub applications.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSopRecommendations(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSopRecommendationsResponse {
        let input = ListSopRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSopRecommendations(input, logger: logger)
    }

    /// Lists the suggested resiliency policies for the Resilience Hub applications.
    @Sendable
    @inlinable
    public func listSuggestedResiliencyPolicies(_ input: ListSuggestedResiliencyPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSuggestedResiliencyPoliciesResponse {
        try await self.client.execute(
            operation: "ListSuggestedResiliencyPolicies", 
            path: "/list-suggested-resiliency-policies", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the suggested resiliency policies for the Resilience Hub applications.
    ///
    /// Parameters:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSuggestedResiliencyPolicies(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSuggestedResiliencyPoliciesResponse {
        let input = ListSuggestedResiliencyPoliciesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSuggestedResiliencyPolicies(input, logger: logger)
    }

    /// Lists the tags for your resources in your Resilience Hub applications.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the tags for your resources in your Resilience Hub applications.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) for a specific resource in your Resilience Hub application.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Lists the test recommendations for the Resilience Hub application.
    @Sendable
    @inlinable
    public func listTestRecommendations(_ input: ListTestRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTestRecommendationsResponse {
        try await self.client.execute(
            operation: "ListTestRecommendations", 
            path: "/list-test-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the test recommendations for the Resilience Hub application.
    ///
    /// Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTestRecommendations(
        assessmentArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTestRecommendationsResponse {
        let input = ListTestRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listTestRecommendations(input, logger: logger)
    }

    /// Lists the resources that are not currently supported in Resilience Hub. An unsupported resource is a resource that exists in the object that was used to create an app, but is not supported by Resilience Hub.
    @Sendable
    @inlinable
    public func listUnsupportedAppVersionResources(_ input: ListUnsupportedAppVersionResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListUnsupportedAppVersionResourcesResponse {
        try await self.client.execute(
            operation: "ListUnsupportedAppVersionResources", 
            path: "/list-unsupported-app-version-resources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the resources that are not currently supported in Resilience Hub. An unsupported resource is a resource that exists in the object that was used to create an app, but is not supported by Resilience Hub.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - nextToken: Null, or the token from a previous call to get the next set of results.
    ///   - resolutionId: The identifier for a specific resolution.
    ///   - logger: Logger use during operation
    @inlinable
    public func listUnsupportedAppVersionResources(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resolutionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListUnsupportedAppVersionResourcesResponse {
        let input = ListUnsupportedAppVersionResourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resolutionId: resolutionId
        )
        return try await self.listUnsupportedAppVersionResources(input, logger: logger)
    }

    /// Publishes a new version of a specific Resilience Hub application.
    @Sendable
    @inlinable
    public func publishAppVersion(_ input: PublishAppVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PublishAppVersionResponse {
        try await self.client.execute(
            operation: "PublishAppVersion", 
            path: "/publish-app-version", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Publishes a new version of a specific Resilience Hub application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - versionName: Name of the application version.
    ///   - logger: Logger use during operation
    @inlinable
    public func publishAppVersion(
        appArn: String,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PublishAppVersionResponse {
        let input = PublishAppVersionRequest(
            appArn: appArn, 
            versionName: versionName
        )
        return try await self.publishAppVersion(input, logger: logger)
    }

    /// Adds or updates the app template for an Resilience Hub application draft version.
    @Sendable
    @inlinable
    public func putDraftAppVersionTemplate(_ input: PutDraftAppVersionTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDraftAppVersionTemplateResponse {
        try await self.client.execute(
            operation: "PutDraftAppVersionTemplate", 
            path: "/put-draft-app-version-template", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds or updates the app template for an Resilience Hub application draft version.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appTemplateBody: A JSON string that provides information about your application structure. To learn more about the appTemplateBody template, see the sample template provided in the Examples section. The appTemplateBody JSON string has the following structure:     resources   The list of logical resources that must be included in the Resilience Hub application. Type: Array  Don't add the resources that you want to exclude.  Each resources array item includes the following fields:     logicalResourceId   Logical identifier of the resource. Type: Object Each logicalResourceId object includes the following fields:    identifier  Identifier of the resource. Type: String    logicalStackName  The name of the CloudFormation stack this resource belongs to. Type: String    resourceGroupName  The name of the resource group this resource belongs to. Type: String    terraformSourceName  The name of the Terraform S3 state file this resource belongs to. Type: String    eksSourceName  Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to.  This parameter accepts values in "eks-cluster/namespace" format.  Type: String       type   The type of resource. Type: string     name   The name of the resource. Type: String    additionalInfo  Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see Configure the application configuration parameters.  Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions"  Value: "[{"region":"&lt;REGION&gt;", "accounts":[{"id":"&lt;ACCOUNT_ID&gt;"}]}]"         appComponents   List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. Type: Array Each appComponents array item includes the following fields:    name  Name of the Application Component. Type: String    type  Type of Application Component. For more information about the types of Application Component, see Grouping resources in an AppComponent. Type: String    resourceNames  The list of included resources that are assigned to the Application Component. Type: Array of strings    additionalInfo  Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see Configure the application configuration parameters.  Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions"  Value: "[{"region":"&lt;REGION&gt;", "accounts":[{"id":"&lt;ACCOUNT_ID&gt;"}]}]"         excludedResources   The list of logical resource identifiers to be excluded from the application. Type: Array  Don't add the resources that you want to include.  Each excludedResources array item includes the following fields:     logicalResourceIds   Logical identifier of the resource. Type: Object  You can configure only one of the following fields:    logicalStackName     resourceGroupName     terraformSourceName     eksSourceName     Each logicalResourceIds object includes the following fields:    identifier  Identifier of the resource. Type: String    logicalStackName  The name of the CloudFormation stack this resource belongs to. Type: String    resourceGroupName  The name of the resource group this resource belongs to. Type: String    terraformSourceName  The name of the Terraform S3 state file this resource belongs to. Type: String    eksSourceName  Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to.  This parameter accepts values in "eks-cluster/namespace" format.  Type: String         version   Resilience Hub application version.    additionalInfo  Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see Configure the application configuration parameters.  Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions"  Value: "[{"region":"&lt;REGION&gt;", "accounts":[{"id":"&lt;ACCOUNT_ID&gt;"}]}]"
    ///   - logger: Logger use during operation
    @inlinable
    public func putDraftAppVersionTemplate(
        appArn: String,
        appTemplateBody: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDraftAppVersionTemplateResponse {
        let input = PutDraftAppVersionTemplateRequest(
            appArn: appArn, 
            appTemplateBody: appTemplateBody
        )
        return try await self.putDraftAppVersionTemplate(input, logger: logger)
    }

    /// Rejects resource grouping recommendations.
    @Sendable
    @inlinable
    public func rejectResourceGroupingRecommendations(_ input: RejectResourceGroupingRecommendationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RejectResourceGroupingRecommendationsResponse {
        try await self.client.execute(
            operation: "RejectResourceGroupingRecommendations", 
            path: "/reject-resource-grouping-recommendations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Rejects resource grouping recommendations.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - entries: List of resource grouping recommendations you have selected to exclude from your application.
    ///   - logger: Logger use during operation
    @inlinable
    public func rejectResourceGroupingRecommendations(
        appArn: String,
        entries: [RejectGroupingRecommendationEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RejectResourceGroupingRecommendationsResponse {
        let input = RejectResourceGroupingRecommendationsRequest(
            appArn: appArn, 
            entries: entries
        )
        return try await self.rejectResourceGroupingRecommendations(input, logger: logger)
    }

    /// Removes resource mappings from a draft application version.
    @Sendable
    @inlinable
    public func removeDraftAppVersionResourceMappings(_ input: RemoveDraftAppVersionResourceMappingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RemoveDraftAppVersionResourceMappingsResponse {
        try await self.client.execute(
            operation: "RemoveDraftAppVersionResourceMappings", 
            path: "/remove-draft-app-version-resource-mappings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes resource mappings from a draft application version.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appRegistryAppNames: The names of the registered applications you want to remove from the resource mappings.
    ///   - eksSourceNames: The names of the Amazon Elastic Kubernetes Service clusters and namespaces you want to remove from the resource mappings.  This parameter accepts values in "eks-cluster/namespace" format.
    ///   - logicalStackNames: The names of the CloudFormation stacks you want to remove from the resource mappings.
    ///   - resourceGroupNames: The names of the resource groups you want to remove from the resource mappings.
    ///   - resourceNames: The names of the resources you want to remove from the resource mappings.
    ///   - terraformSourceNames: The names of the Terraform sources you want to remove from the resource mappings.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeDraftAppVersionResourceMappings(
        appArn: String,
        appRegistryAppNames: [String]? = nil,
        eksSourceNames: [String]? = nil,
        logicalStackNames: [String]? = nil,
        resourceGroupNames: [String]? = nil,
        resourceNames: [String]? = nil,
        terraformSourceNames: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RemoveDraftAppVersionResourceMappingsResponse {
        let input = RemoveDraftAppVersionResourceMappingsRequest(
            appArn: appArn, 
            appRegistryAppNames: appRegistryAppNames, 
            eksSourceNames: eksSourceNames, 
            logicalStackNames: logicalStackNames, 
            resourceGroupNames: resourceGroupNames, 
            resourceNames: resourceNames, 
            terraformSourceNames: terraformSourceNames
        )
        return try await self.removeDraftAppVersionResourceMappings(input, logger: logger)
    }

    /// Resolves the resources for an application version.
    @Sendable
    @inlinable
    public func resolveAppVersionResources(_ input: ResolveAppVersionResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ResolveAppVersionResourcesResponse {
        try await self.client.execute(
            operation: "ResolveAppVersionResources", 
            path: "/resolve-app-version-resources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Resolves the resources for an application version.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func resolveAppVersionResources(
        appArn: String,
        appVersion: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ResolveAppVersionResourcesResponse {
        let input = ResolveAppVersionResourcesRequest(
            appArn: appArn, 
            appVersion: appVersion
        )
        return try await self.resolveAppVersionResources(input, logger: logger)
    }

    /// Creates a new application assessment for an application.
    @Sendable
    @inlinable
    public func startAppAssessment(_ input: StartAppAssessmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartAppAssessmentResponse {
        try await self.client.execute(
            operation: "StartAppAssessment", 
            path: "/start-app-assessment", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new application assessment for an application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - assessmentName: The name for the assessment.
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - tags: Tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func startAppAssessment(
        appArn: String,
        appVersion: String,
        assessmentName: String,
        clientToken: String? = StartAppAssessmentRequest.idempotencyToken(),
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartAppAssessmentResponse {
        let input = StartAppAssessmentRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            assessmentName: assessmentName, 
            clientToken: clientToken, 
            tags: tags
        )
        return try await self.startAppAssessment(input, logger: logger)
    }

    /// Initiates the export task of metrics.
    @Sendable
    @inlinable
    public func startMetricsExport(_ input: StartMetricsExportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartMetricsExportResponse {
        try await self.client.execute(
            operation: "StartMetricsExport", 
            path: "/start-metrics-export", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates the export task of metrics.
    ///
    /// Parameters:
    ///   - bucketName: (Optional) Specifies the name of the Amazon Simple Storage Service bucket where the exported metrics will be stored.
    ///   - clientToken: Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func startMetricsExport(
        bucketName: String? = nil,
        clientToken: String? = StartMetricsExportRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartMetricsExportResponse {
        let input = StartMetricsExportRequest(
            bucketName: bucketName, 
            clientToken: clientToken
        )
        return try await self.startMetricsExport(input, logger: logger)
    }

    /// Starts grouping recommendation task.
    @Sendable
    @inlinable
    public func startResourceGroupingRecommendationTask(_ input: StartResourceGroupingRecommendationTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartResourceGroupingRecommendationTaskResponse {
        try await self.client.execute(
            operation: "StartResourceGroupingRecommendationTask", 
            path: "/start-resource-grouping-recommendation-task", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts grouping recommendation task.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func startResourceGroupingRecommendationTask(
        appArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartResourceGroupingRecommendationTaskResponse {
        let input = StartResourceGroupingRecommendationTaskRequest(
            appArn: appArn
        )
        return try await self.startResourceGroupingRecommendationTask(input, logger: logger)
    }

    /// Applies one or more tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Applies one or more tags to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource.
    ///   - tags: The tags to assign to the resource. Each tag consists of a key/value pair.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes one or more tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes one or more tags from a resource.
    ///
    /// Parameters:
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource.
    ///   - tagKeys: The keys of the tags you want to remove.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates an application.
    @Sendable
    @inlinable
    public func updateApp(_ input: UpdateAppRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAppResponse {
        try await self.client.execute(
            operation: "UpdateApp", 
            path: "/update-app", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an application.
    ///
    /// Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - assessmentSchedule:  Assessment execution schedule with 'Daily' or 'Disabled' values.
    ///   - clearResiliencyPolicyArn: Specifies if the resiliency policy ARN should be cleared.
    ///   - description: The optional description for an app.
    ///   - eventSubscriptions: The list of events you would like to subscribe and get notification for. Currently, Resilience Hub supports notifications only for Drift detected and Scheduled assessment failure events.
    ///   - permissionModel: Defines the roles and credentials that Resilience Hub would use while creating an application, importing its resources, and running an assessment.
    ///   - policyArn: Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func updateApp(
        appArn: String,
        assessmentSchedule: AppAssessmentScheduleType? = nil,
        clearResiliencyPolicyArn: Bool? = nil,
        description: String? = nil,
        eventSubscriptions: [EventSubscription]? = nil,
        permissionModel: PermissionModel? = nil,
        policyArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAppResponse {
        let input = UpdateAppRequest(
            appArn: appArn, 
            assessmentSchedule: assessmentSchedule, 
            clearResiliencyPolicyArn: clearResiliencyPolicyArn, 
            description: description, 
            eventSubscriptions: eventSubscriptions, 
            permissionModel: permissionModel, 
            policyArn: policyArn
        )
        return try await self.updateApp(input, logger: logger)
    }

    /// Updates the Resilience Hub application version.  This API updates the Resilience Hub application draft version. To use this information for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    @Sendable
    @inlinable
    public func updateAppVersion(_ input: UpdateAppVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAppVersionResponse {
        try await self.client.execute(
            operation: "UpdateAppVersion", 
            path: "/update-app-version", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the Resilience Hub application version.  This API updates the Resilience Hub application draft version. To use this information for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    ///
    /// Parameters:
    ///   - additionalInfo: Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see Configure the application configuration parameters.  Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions"  Value: "[{"region":"&lt;REGION&gt;", "accounts":[{"id":"&lt;ACCOUNT_ID&gt;"}]}]"
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAppVersion(
        additionalInfo: [String: [String]]? = nil,
        appArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAppVersionResponse {
        let input = UpdateAppVersionRequest(
            additionalInfo: additionalInfo, 
            appArn: appArn
        )
        return try await self.updateAppVersion(input, logger: logger)
    }

    /// Updates an existing Application Component in the Resilience Hub application.  This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    @Sendable
    @inlinable
    public func updateAppVersionAppComponent(_ input: UpdateAppVersionAppComponentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAppVersionAppComponentResponse {
        try await self.client.execute(
            operation: "UpdateAppVersionAppComponent", 
            path: "/update-app-version-app-component", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Application Component in the Resilience Hub application.  This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API.
    ///
    /// Parameters:
    ///   - additionalInfo: Currently, there is no supported additional information for Application Components.
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - id: Identifier of the Application Component.
    ///   - name: Name of the Application Component.
    ///   - type: Type of Application Component. For more information about the types of Application Component, see Grouping resources in an AppComponent.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAppVersionAppComponent(
        additionalInfo: [String: [String]]? = nil,
        appArn: String,
        id: String,
        name: String? = nil,
        type: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAppVersionAppComponentResponse {
        let input = UpdateAppVersionAppComponentRequest(
            additionalInfo: additionalInfo, 
            appArn: appArn, 
            id: id, 
            name: name, 
            type: type
        )
        return try await self.updateAppVersionAppComponent(input, logger: logger)
    }

    /// Updates the resource details in the Resilience Hub application.    This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   To update application version with new physicalResourceID, you must call ResolveAppVersionResources API.
    @Sendable
    @inlinable
    public func updateAppVersionResource(_ input: UpdateAppVersionResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAppVersionResourceResponse {
        try await self.client.execute(
            operation: "UpdateAppVersionResource", 
            path: "/update-app-version-resource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the resource details in the Resilience Hub application.    This action has no effect outside Resilience Hub.   This API updates the Resilience Hub application draft version. To use this resource for running resiliency assessments, you must publish the Resilience Hub application using the PublishAppVersion API.   To update application version with new physicalResourceID, you must call ResolveAppVersionResources API.
    ///
    /// Parameters:
    ///   - additionalInfo: Currently, there is no supported additional information for resources.
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appComponents: List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added.
    ///   - awsAccountId: Amazon Web Services account that owns the physical resource.
    ///   - awsRegion: Amazon Web Services region that owns the physical resource.
    ///   - excluded: Indicates if a resource is excluded from an Resilience Hub application.  You can exclude only imported resources from an Resilience Hub application.
    ///   - logicalResourceId: Logical identifier of the resource.
    ///   - physicalResourceId: Physical identifier of the resource.
    ///   - resourceName: Name of the resource.
    ///   - resourceType: Type of resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAppVersionResource(
        additionalInfo: [String: [String]]? = nil,
        appArn: String,
        appComponents: [String]? = nil,
        awsAccountId: String? = nil,
        awsRegion: String? = nil,
        excluded: Bool? = nil,
        logicalResourceId: LogicalResourceId? = nil,
        physicalResourceId: String? = nil,
        resourceName: String? = nil,
        resourceType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAppVersionResourceResponse {
        let input = UpdateAppVersionResourceRequest(
            additionalInfo: additionalInfo, 
            appArn: appArn, 
            appComponents: appComponents, 
            awsAccountId: awsAccountId, 
            awsRegion: awsRegion, 
            excluded: excluded, 
            logicalResourceId: logicalResourceId, 
            physicalResourceId: physicalResourceId, 
            resourceName: resourceName, 
            resourceType: resourceType
        )
        return try await self.updateAppVersionResource(input, logger: logger)
    }

    /// Updates a resiliency policy.  Resilience Hub allows you to provide a value of zero for rtoInSecs and rpoInSecs of your resiliency policy. But, while assessing your application, the lowest possible assessment result is near zero. Hence, if you provide value zero for rtoInSecs and rpoInSecs, the estimated workload RTO and estimated workload RPO result will be near zero and the Compliance status for your application will be set to Policy breached.
    @Sendable
    @inlinable
    public func updateResiliencyPolicy(_ input: UpdateResiliencyPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateResiliencyPolicyResponse {
        try await self.client.execute(
            operation: "UpdateResiliencyPolicy", 
            path: "/update-resiliency-policy", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a resiliency policy.  Resilience Hub allows you to provide a value of zero for rtoInSecs and rpoInSecs of your resiliency policy. But, while assessing your application, the lowest possible assessment result is near zero. Hence, if you provide value zero for rtoInSecs and rpoInSecs, the estimated workload RTO and estimated workload RPO result will be near zero and the Compliance status for your application will be set to Policy breached.
    ///
    /// Parameters:
    ///   - dataLocationConstraint: Specifies a high-level geographical location constraint for where your resilience policy data can be stored.
    ///   - policy: Resiliency policy to be created, including the recovery time objective (RTO) and recovery point objective (RPO) in seconds.
    ///   - policyArn: Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is:
    ///   - policyDescription: Description of the resiliency policy.
    ///   - policyName: Name of the resiliency policy.
    ///   - tier: The tier for this resiliency policy, ranging from the highest severity (MissionCritical) to lowest (NonCritical).
    ///   - logger: Logger use during operation
    @inlinable
    public func updateResiliencyPolicy(
        dataLocationConstraint: DataLocationConstraint? = nil,
        policy: [DisruptionType: FailurePolicy]? = nil,
        policyArn: String,
        policyDescription: String? = nil,
        policyName: String? = nil,
        tier: ResiliencyPolicyTier? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateResiliencyPolicyResponse {
        let input = UpdateResiliencyPolicyRequest(
            dataLocationConstraint: dataLocationConstraint, 
            policy: policy, 
            policyArn: policyArn, 
            policyDescription: policyDescription, 
            policyName: policyName, 
            tier: tier
        )
        return try await self.updateResiliencyPolicy(input, logger: logger)
    }
}

extension Resiliencehub {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Resiliencehub, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Resiliencehub {
    /// Return PaginatorSequence for operation ``listAlarmRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAlarmRecommendationsPaginator(
        _ input: ListAlarmRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAlarmRecommendationsRequest, ListAlarmRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listAlarmRecommendations,
            inputKey: \ListAlarmRecommendationsRequest.nextToken,
            outputKey: \ListAlarmRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAlarmRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listAlarmRecommendationsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAlarmRecommendationsRequest, ListAlarmRecommendationsResponse> {
        let input = ListAlarmRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listAlarmRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppAssessmentComplianceDrifts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentComplianceDriftsPaginator(
        _ input: ListAppAssessmentComplianceDriftsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentComplianceDriftsRequest, ListAppAssessmentComplianceDriftsResponse> {
        return .init(
            input: input,
            command: self.listAppAssessmentComplianceDrifts,
            inputKey: \ListAppAssessmentComplianceDriftsRequest.nextToken,
            outputKey: \ListAppAssessmentComplianceDriftsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppAssessmentComplianceDrifts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of compliance drifts requested.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentComplianceDriftsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentComplianceDriftsRequest, ListAppAssessmentComplianceDriftsResponse> {
        let input = ListAppAssessmentComplianceDriftsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listAppAssessmentComplianceDriftsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppAssessmentResourceDrifts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentResourceDriftsPaginator(
        _ input: ListAppAssessmentResourceDriftsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentResourceDriftsRequest, ListAppAssessmentResourceDriftsResponse> {
        return .init(
            input: input,
            command: self.listAppAssessmentResourceDrifts,
            inputKey: \ListAppAssessmentResourceDriftsRequest.nextToken,
            outputKey: \ListAppAssessmentResourceDriftsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppAssessmentResourceDrifts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of drift results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentResourceDriftsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentResourceDriftsRequest, ListAppAssessmentResourceDriftsResponse> {
        let input = ListAppAssessmentResourceDriftsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listAppAssessmentResourceDriftsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppAssessments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentsPaginator(
        _ input: ListAppAssessmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentsRequest, ListAppAssessmentsResponse> {
        return .init(
            input: input,
            command: self.listAppAssessments,
            inputKey: \ListAppAssessmentsRequest.nextToken,
            outputKey: \ListAppAssessmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppAssessments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - assessmentName: The name for the assessment.
    ///   - assessmentStatus: The current status of the assessment for the resiliency policy.
    ///   - complianceStatus: The current status of compliance for the resiliency policy.
    ///   - invoker: Specifies the entity that invoked a specific assessment, either a User or the System.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - reverseOrder: The default is to sort by ascending startTime.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppAssessmentsPaginator(
        appArn: String? = nil,
        assessmentName: String? = nil,
        assessmentStatus: [AssessmentStatus]? = nil,
        complianceStatus: ComplianceStatus? = nil,
        invoker: AssessmentInvoker? = nil,
        maxResults: Int? = nil,
        reverseOrder: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppAssessmentsRequest, ListAppAssessmentsResponse> {
        let input = ListAppAssessmentsRequest(
            appArn: appArn, 
            assessmentName: assessmentName, 
            assessmentStatus: assessmentStatus, 
            complianceStatus: complianceStatus, 
            invoker: invoker, 
            maxResults: maxResults, 
            reverseOrder: reverseOrder
        )
        return self.listAppAssessmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppComponentCompliances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppComponentCompliancesPaginator(
        _ input: ListAppComponentCompliancesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppComponentCompliancesRequest, ListAppComponentCompliancesResponse> {
        return .init(
            input: input,
            command: self.listAppComponentCompliances,
            inputKey: \ListAppComponentCompliancesRequest.nextToken,
            outputKey: \ListAppComponentCompliancesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppComponentCompliances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppComponentCompliancesPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppComponentCompliancesRequest, ListAppComponentCompliancesResponse> {
        let input = ListAppComponentCompliancesRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listAppComponentCompliancesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppComponentRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppComponentRecommendationsPaginator(
        _ input: ListAppComponentRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppComponentRecommendationsRequest, ListAppComponentRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listAppComponentRecommendations,
            inputKey: \ListAppComponentRecommendationsRequest.nextToken,
            outputKey: \ListAppComponentRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppComponentRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppComponentRecommendationsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppComponentRecommendationsRequest, ListAppComponentRecommendationsResponse> {
        let input = ListAppComponentRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listAppComponentRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppInputSources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppInputSourcesPaginator(
        _ input: ListAppInputSourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppInputSourcesRequest, ListAppInputSourcesResponse> {
        return .init(
            input: input,
            command: self.listAppInputSources,
            inputKey: \ListAppInputSourcesRequest.nextToken,
            outputKey: \ListAppInputSourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppInputSources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Resilience Hub application version.
    ///   - maxResults: Maximum number of input sources to be displayed per Resilience Hub application.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppInputSourcesPaginator(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppInputSourcesRequest, ListAppInputSourcesResponse> {
        let input = ListAppInputSourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults
        )
        return self.listAppInputSourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppVersionAppComponents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionAppComponentsPaginator(
        _ input: ListAppVersionAppComponentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppVersionAppComponentsRequest, ListAppVersionAppComponentsResponse> {
        return .init(
            input: input,
            command: self.listAppVersionAppComponents,
            inputKey: \ListAppVersionAppComponentsRequest.nextToken,
            outputKey: \ListAppVersionAppComponentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppVersionAppComponents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: Version of the Application Component.
    ///   - maxResults: Maximum number of Application Components to be displayed per Resilience Hub application version.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionAppComponentsPaginator(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppVersionAppComponentsRequest, ListAppVersionAppComponentsResponse> {
        let input = ListAppVersionAppComponentsRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults
        )
        return self.listAppVersionAppComponentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppVersionResourceMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionResourceMappingsPaginator(
        _ input: ListAppVersionResourceMappingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppVersionResourceMappingsRequest, ListAppVersionResourceMappingsResponse> {
        return .init(
            input: input,
            command: self.listAppVersionResourceMappings,
            inputKey: \ListAppVersionResourceMappingsRequest.nextToken,
            outputKey: \ListAppVersionResourceMappingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppVersionResourceMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionResourceMappingsPaginator(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppVersionResourceMappingsRequest, ListAppVersionResourceMappingsResponse> {
        let input = ListAppVersionResourceMappingsRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults
        )
        return self.listAppVersionResourceMappingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppVersionResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionResourcesPaginator(
        _ input: ListAppVersionResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppVersionResourcesRequest, ListAppVersionResourcesResponse> {
        return .init(
            input: input,
            command: self.listAppVersionResources,
            inputKey: \ListAppVersionResourcesRequest.nextToken,
            outputKey: \ListAppVersionResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppVersionResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - resolutionId: The identifier for a specific resolution.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionResourcesPaginator(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        resolutionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppVersionResourcesRequest, ListAppVersionResourcesResponse> {
        let input = ListAppVersionResourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            resolutionId: resolutionId
        )
        return self.listAppVersionResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAppVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionsPaginator(
        _ input: ListAppVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppVersionsRequest, ListAppVersionsResponse> {
        return .init(
            input: input,
            command: self.listAppVersions,
            inputKey: \ListAppVersionsRequest.nextToken,
            outputKey: \ListAppVersionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - endTime: Upper limit of the time range to filter the application versions.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - startTime: Lower limit of the time range to filter the application versions.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppVersionsPaginator(
        appArn: String,
        endTime: Date? = nil,
        maxResults: Int? = nil,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppVersionsRequest, ListAppVersionsResponse> {
        let input = ListAppVersionsRequest(
            appArn: appArn, 
            endTime: endTime, 
            maxResults: maxResults, 
            startTime: startTime
        )
        return self.listAppVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApps(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppsPaginator(
        _ input: ListAppsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppsRequest, ListAppsResponse> {
        return .init(
            input: input,
            command: self.listApps,
            inputKey: \ListAppsRequest.nextToken,
            outputKey: \ListAppsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApps(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - awsApplicationArn: Amazon Resource Name (ARN) of  Resource Groups group that is integrated with an AppRegistry application. For more information about ARNs,
    ///   - fromLastAssessmentTime: Lower limit of the range that is used to filter applications based on their last assessment times.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - name: The name for the one of the listed applications.
    ///   - reverseOrder: The application list is sorted based on the values of lastAppComplianceEvaluationTime field. By default, application list is sorted in ascending order. To sort the application list in descending order, set this field to True.
    ///   - toLastAssessmentTime: Upper limit of the range that is used to filter the applications based on their last assessment times.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppsPaginator(
        appArn: String? = nil,
        awsApplicationArn: String? = nil,
        fromLastAssessmentTime: Date? = nil,
        maxResults: Int? = nil,
        name: String? = nil,
        reverseOrder: Bool? = nil,
        toLastAssessmentTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppsRequest, ListAppsResponse> {
        let input = ListAppsRequest(
            appArn: appArn, 
            awsApplicationArn: awsApplicationArn, 
            fromLastAssessmentTime: fromLastAssessmentTime, 
            maxResults: maxResults, 
            name: name, 
            reverseOrder: reverseOrder, 
            toLastAssessmentTime: toLastAssessmentTime
        )
        return self.listAppsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMetrics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricsPaginator(
        _ input: ListMetricsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMetricsRequest, ListMetricsResponse> {
        return .init(
            input: input,
            command: self.listMetrics,
            inputKey: \ListMetricsRequest.nextToken,
            outputKey: \ListMetricsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMetrics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - conditions: Indicates the list of all the conditions that were applied on the metrics.
    ///   - dataSource: Indicates the data source of the metrics.
    ///   - fields: Indicates the list of fields in the data source.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - sorts: (Optional) Indicates the order in which you want to sort the fields in the metrics. By default, the fields are sorted in the ascending order.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMetricsPaginator(
        conditions: [Condition]? = nil,
        dataSource: String? = nil,
        fields: [Field]? = nil,
        maxResults: Int? = nil,
        sorts: [Sort]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMetricsRequest, ListMetricsResponse> {
        let input = ListMetricsRequest(
            conditions: conditions, 
            dataSource: dataSource, 
            fields: fields, 
            maxResults: maxResults, 
            sorts: sorts
        )
        return self.listMetricsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecommendationTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationTemplatesPaginator(
        _ input: ListRecommendationTemplatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecommendationTemplatesRequest, ListRecommendationTemplatesResponse> {
        return .init(
            input: input,
            command: self.listRecommendationTemplates,
            inputKey: \ListRecommendationTemplatesRequest.nextToken,
            outputKey: \ListRecommendationTemplatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecommendationTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - name: The name for one of the listed recommendation templates.
    ///   - recommendationTemplateArn: The Amazon Resource Name (ARN) for a recommendation template.
    ///   - reverseOrder: The default is to sort by ascending startTime.
    ///   - status: Status of the action.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecommendationTemplatesPaginator(
        assessmentArn: String? = nil,
        maxResults: Int? = nil,
        name: String? = nil,
        recommendationTemplateArn: String? = nil,
        reverseOrder: Bool? = nil,
        status: [RecommendationTemplateStatus]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecommendationTemplatesRequest, ListRecommendationTemplatesResponse> {
        let input = ListRecommendationTemplatesRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults, 
            name: name, 
            recommendationTemplateArn: recommendationTemplateArn, 
            reverseOrder: reverseOrder, 
            status: status
        )
        return self.listRecommendationTemplatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listResiliencyPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listResiliencyPoliciesPaginator(
        _ input: ListResiliencyPoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListResiliencyPoliciesRequest, ListResiliencyPoliciesResponse> {
        return .init(
            input: input,
            command: self.listResiliencyPolicies,
            inputKey: \ListResiliencyPoliciesRequest.nextToken,
            outputKey: \ListResiliencyPoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listResiliencyPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - policyName: Name of the resiliency policy.
    ///   - logger: Logger used for logging
    @inlinable
    public func listResiliencyPoliciesPaginator(
        maxResults: Int? = nil,
        policyName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListResiliencyPoliciesRequest, ListResiliencyPoliciesResponse> {
        let input = ListResiliencyPoliciesRequest(
            maxResults: maxResults, 
            policyName: policyName
        )
        return self.listResiliencyPoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listResourceGroupingRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceGroupingRecommendationsPaginator(
        _ input: ListResourceGroupingRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListResourceGroupingRecommendationsRequest, ListResourceGroupingRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listResourceGroupingRecommendations,
            inputKey: \ListResourceGroupingRecommendationsRequest.nextToken,
            outputKey: \ListResourceGroupingRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listResourceGroupingRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - maxResults: Maximum number of grouping recommendations to be displayed per Resilience Hub application.
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceGroupingRecommendationsPaginator(
        appArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListResourceGroupingRecommendationsRequest, ListResourceGroupingRecommendationsResponse> {
        let input = ListResourceGroupingRecommendationsRequest(
            appArn: appArn, 
            maxResults: maxResults
        )
        return self.listResourceGroupingRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSopRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSopRecommendationsPaginator(
        _ input: ListSopRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSopRecommendationsRequest, ListSopRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listSopRecommendations,
            inputKey: \ListSopRecommendationsRequest.nextToken,
            outputKey: \ListSopRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSopRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listSopRecommendationsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSopRecommendationsRequest, ListSopRecommendationsResponse> {
        let input = ListSopRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listSopRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSuggestedResiliencyPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSuggestedResiliencyPoliciesPaginator(
        _ input: ListSuggestedResiliencyPoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSuggestedResiliencyPoliciesRequest, ListSuggestedResiliencyPoliciesResponse> {
        return .init(
            input: input,
            command: self.listSuggestedResiliencyPolicies,
            inputKey: \ListSuggestedResiliencyPoliciesRequest.nextToken,
            outputKey: \ListSuggestedResiliencyPoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSuggestedResiliencyPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listSuggestedResiliencyPoliciesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSuggestedResiliencyPoliciesRequest, ListSuggestedResiliencyPoliciesResponse> {
        let input = ListSuggestedResiliencyPoliciesRequest(
            maxResults: maxResults
        )
        return self.listSuggestedResiliencyPoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTestRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTestRecommendationsPaginator(
        _ input: ListTestRecommendationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTestRecommendationsRequest, ListTestRecommendationsResponse> {
        return .init(
            input: input,
            command: self.listTestRecommendations,
            inputKey: \ListTestRecommendationsRequest.nextToken,
            outputKey: \ListTestRecommendationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTestRecommendations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentArn: Amazon Resource Name (ARN) of the assessment. The format for this ARN is:
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - logger: Logger used for logging
    @inlinable
    public func listTestRecommendationsPaginator(
        assessmentArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTestRecommendationsRequest, ListTestRecommendationsResponse> {
        let input = ListTestRecommendationsRequest(
            assessmentArn: assessmentArn, 
            maxResults: maxResults
        )
        return self.listTestRecommendationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listUnsupportedAppVersionResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listUnsupportedAppVersionResourcesPaginator(
        _ input: ListUnsupportedAppVersionResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListUnsupportedAppVersionResourcesRequest, ListUnsupportedAppVersionResourcesResponse> {
        return .init(
            input: input,
            command: self.listUnsupportedAppVersionResources,
            inputKey: \ListUnsupportedAppVersionResourcesRequest.nextToken,
            outputKey: \ListUnsupportedAppVersionResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listUnsupportedAppVersionResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - appArn: Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is:
    ///   - appVersion: The version of the application.
    ///   - maxResults: Maximum number of results to include in the response. If more results exist than the specified
    ///   - resolutionId: The identifier for a specific resolution.
    ///   - logger: Logger used for logging
    @inlinable
    public func listUnsupportedAppVersionResourcesPaginator(
        appArn: String,
        appVersion: String,
        maxResults: Int? = nil,
        resolutionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListUnsupportedAppVersionResourcesRequest, ListUnsupportedAppVersionResourcesResponse> {
        let input = ListUnsupportedAppVersionResourcesRequest(
            appArn: appArn, 
            appVersion: appVersion, 
            maxResults: maxResults, 
            resolutionId: resolutionId
        )
        return self.listUnsupportedAppVersionResourcesPaginator(input, logger: logger)
    }
}

extension Resiliencehub.ListAlarmRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAlarmRecommendationsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppAssessmentComplianceDriftsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppAssessmentComplianceDriftsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppAssessmentResourceDriftsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppAssessmentResourceDriftsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppAssessmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppAssessmentsRequest {
        return .init(
            appArn: self.appArn,
            assessmentName: self.assessmentName,
            assessmentStatus: self.assessmentStatus,
            complianceStatus: self.complianceStatus,
            invoker: self.invoker,
            maxResults: self.maxResults,
            nextToken: token,
            reverseOrder: self.reverseOrder
        )
    }
}

extension Resiliencehub.ListAppComponentCompliancesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppComponentCompliancesRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppComponentRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppComponentRecommendationsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppInputSourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppInputSourcesRequest {
        return .init(
            appArn: self.appArn,
            appVersion: self.appVersion,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppVersionAppComponentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppVersionAppComponentsRequest {
        return .init(
            appArn: self.appArn,
            appVersion: self.appVersion,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppVersionResourceMappingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppVersionResourceMappingsRequest {
        return .init(
            appArn: self.appArn,
            appVersion: self.appVersion,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListAppVersionResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppVersionResourcesRequest {
        return .init(
            appArn: self.appArn,
            appVersion: self.appVersion,
            maxResults: self.maxResults,
            nextToken: token,
            resolutionId: self.resolutionId
        )
    }
}

extension Resiliencehub.ListAppVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppVersionsRequest {
        return .init(
            appArn: self.appArn,
            endTime: self.endTime,
            maxResults: self.maxResults,
            nextToken: token,
            startTime: self.startTime
        )
    }
}

extension Resiliencehub.ListAppsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListAppsRequest {
        return .init(
            appArn: self.appArn,
            awsApplicationArn: self.awsApplicationArn,
            fromLastAssessmentTime: self.fromLastAssessmentTime,
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token,
            reverseOrder: self.reverseOrder,
            toLastAssessmentTime: self.toLastAssessmentTime
        )
    }
}

extension Resiliencehub.ListMetricsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListMetricsRequest {
        return .init(
            conditions: self.conditions,
            dataSource: self.dataSource,
            fields: self.fields,
            maxResults: self.maxResults,
            nextToken: token,
            sorts: self.sorts
        )
    }
}

extension Resiliencehub.ListRecommendationTemplatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListRecommendationTemplatesRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token,
            recommendationTemplateArn: self.recommendationTemplateArn,
            reverseOrder: self.reverseOrder,
            status: self.status
        )
    }
}

extension Resiliencehub.ListResiliencyPoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListResiliencyPoliciesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            policyName: self.policyName
        )
    }
}

extension Resiliencehub.ListResourceGroupingRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListResourceGroupingRecommendationsRequest {
        return .init(
            appArn: self.appArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListSopRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListSopRecommendationsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListSuggestedResiliencyPoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListSuggestedResiliencyPoliciesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListTestRecommendationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListTestRecommendationsRequest {
        return .init(
            assessmentArn: self.assessmentArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Resiliencehub.ListUnsupportedAppVersionResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Resiliencehub.ListUnsupportedAppVersionResourcesRequest {
        return .init(
            appArn: self.appArn,
            appVersion: self.appVersion,
            maxResults: self.maxResults,
            nextToken: token,
            resolutionId: self.resolutionId
        )
    }
}
